在武學中,內功修練到極致,便能「氣化萬物」,將體內之氣隨心所欲地轉化為各種招式。在自動化測試的世界裡,測試資料正是我們的「氣」。而今天,我們將學習如何將這些「氣」化為我們所需的各種測試資料,讓測試變得更加靈活與強大。
在測試中,我們常常需要大量的測試資料來驗證各種情境,例如:需要驗證一個函式在不同輸入下的行為,例如:處理正常使用者資訊、無效 email、空字串等、驗證多個服務之間的協同工作,例如:訂單流程中,需要模擬商品資料、使用者資料、金流資訊等。而在真實使用者旅程中,模擬各種情境,例如:新使用者註冊、舊使用者登入、不同權限的使用者行為。
直接使用真實資料庫的資料,會導致測試不穩定、速度慢,且可能存在資料隱私問題。這時,Mock Test Data 的概念便應運而生。它讓我們能夠在不依賴真實資料來源的情況下,創造出各種我們需要的虛擬資料,從而讓測試變得更快、更穩定、更獨立。
測試資料的生成與管理並非一蹴可幾,我們可以將其分為三個層次:
這是最簡單的資料生成方式,直接在測試程式碼中寫死所需的資料。這樣的方式適合小型專案或是簡單的單元測試,但缺少多樣性的測試資料,可能會導致在真實環境才能發現問題。
// user-login.spec.js
test('should login successfully with valid credentials', async ({ page }) => {
const user = {
username: 'testuser',
password: 'password123',
email: 'testuser@example.com'
};
// Use the hardcoded data to perform login
await page.fill('#username', user.username);
await page.fill('#password', user.password);
await page.click('#login-button');
// Assertion
});
當測試情境變得複雜時,我們需要一個更具彈性的方式來產生資料。使用 faker 資料庫能夠隨機產生資料,它能夠根據你的需求,產生出各種格式的測試資料。通常可以直接使用 AI 撰寫這個函式,並且根據你的真實需求,產生更多樣性的測試資料。
// data-factory.js
import { faker } from '@faker-js/faker';
export const UserFactory = () => {
return {
name: faker.person.fullName(),
email: faker.internet.email(),
password: faker.internet.password(),
address: faker.location.city()
};
};
// Now, in your test file
const user = UserFactory();
// Use the generated data in your test
在測試 Web 應用程式時,後端 API 的穩定性直接影響到前端測試的結果。在第 25 天,我們將更詳細地討論這個概念。在這裡,我們只需要瞭解,當我們需要測試與後端 API 互動的 E2E 或整合測試時,我們可以建立一個 Mock Server 來模擬後端 API 的回應,而不是直接請求真實的後端服務。
還記得我們在前面幾天提到的 spec-kit 嗎?這個工具最核心的價值之一,就是它能根據你提供的 Gherkin 語法與 OpenAPI 規格,自動生成程式碼。我們可以將 Mock Test Data 的概念與 spec-kit 結合,達到更強大的效果。
今天,我們學習了測試資料的生成與管理,這就像是內功修煉中的「氣化萬物」。我們從最基本的寫死資料,到使用 Factory Pattern 建立資料工廠,透過這樣的方式,我們能夠將測試資料有效管理,並且將更多心力放在測試設計和策略上面,在下一篇,我們將進入更進階的修練,學習如何運用 Mock Server 隔離外部服務,讓測試能夠更為穩定。